perm filename SEND.MID[NET,MRC] blob
sn#330531 filedate 1978-01-22 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE SNDMSG
C00004 00003 SET UP CONNECTION
C00006 00004 SEND THE COMMAND
C00008 00005 SEND MESSAGE HEADER
C00010 00006 GET AND SEND THE MESSAGE
C00011 ENDMK
C⊗;
TITLE SNDMSG
; QUICK NETWORK SEND KLUDGE UNTIL BH MAKES MAIL DO THE RIGHT THING.
NIORTS==-1 ? ERRHAN==-1 ? HSTTAB==-1 ; MARVELOUS NETWORK ROUTINES
.INSRT NETWRK[NET,MRC]
CORBEG==.
CMDP: BLOCK 1.
LUZEP: BLOCK 1.
PDL: BLOCK 20.
USRBUF: BLOCK 10.
HSTBUF: BLOCK 10.
COREND==.-1
SUBTTL INITIALIZATION AND COMMAND PARSING
SNDMSG: JFCL
RESET
MOVE 17,[PDL(-20)]
SETZM CORBEG
MOVE [CORBEG,,CORBEG+1]
BLT COREND
RESCAN
CMDSCN: INCHRS
JRST TOPRMT
CAIE ↑J
CAIN 175
JRST TOPRMT
CAIE ";
JRST CMDSCN
CAIA
TOPRMT: OUTSTR [ASCIZ/To: /]
; GET USER NAME
MOVE 1,[440700,,USRBUF]
GETUSR: INCHWL
CAIN ↑M
JRST GETUSR
CAIE 175
CAIN ↑J
JRST [OUTSTR [ASCIZ/Missing host name./]
JRST SPCLUZ]
CAIE "% ; CRETIN SAIL CONVENTION
CAIN "@
JRST GETHST
IDPB 1
JRST GETUSR
; GET HOST NAME
GETHST: MOVE 1,[440700,,HSTBUF]
SKIPE USRBUF
JRST GETHCH
OUTSTR [ASCIZ/Missing user name./]
SPCLUZ: OUTSTR [ASCIZ/ You must say <user>@<host>.
/]
CLRBFI
JRST SNDMSG
GETHCH: INCHWL
CAIN <" >
JRST GOGO
CAIN ↑M
JRST GETHCH
CAIE 175
CAIN ↑J
JRST GOGOGO
IDPB 1
JRST GETHCH
SUBTTL SET UP CONNECTION
; FIRE UP A CONNECTION
GOGO: SETOM CMDP
GOGOGO: PUSHJ 17,MAPHST
MOVEI HSTBUF
PUSHJ 17,HSTNAM
JRST [ OUTSTR [ASCIZ/No such host.
/]
CLRBFI
PUSHJ 17,UNMHST
JRST SNDMSG]
JRST [ OUTSTR [ASCIZ/Ambiguous host name.
/]
CLRBFI
PUSHJ 17,UNMHST
JRST SNDMSG]
MOVEM HOST
PUSHJ 17,UNMHST
MOVEI 3
MOVEM ICPSKT
PUSHJ 17,CONECT
; EAT UP THE GREETING MESSAGE
GRTEAT: SETZM LUZEP
IRPC GARPLY,,[300 ]
PUSHJ 17,NETICW
CAIE "GARPLY
SETOM LUZEP
TERMIN
GRTFLS: PUSHJ 17,NETICW ; FLUSH TEXT OF GREETING
CAIE ↑J
JRST GRTFLS
SKIPE LUZEP
JRST GRTEAT ; GOT OTHER THAN "300 "
SUBTTL SEND THE COMMAND
IRPC GARPLY,,[XSEN ]
MOVEI "GARPLY
PUSHJ 17,NETOCH
TERMIN
MOVE 1,[440700,,USRBUF]
SNDUSR: ILDB 1
JUMPE SNTUSR
PUSHJ 17,NETOCH
JRST SNDUSR
SNTUSR: MOVEI ↑M ? PUSHJ 17,NETOCH
MOVEI ↑J ? PUSHJ 17,NETOCH
PUSHJ 17,NETSND ; FORCE COMMAND OUT
; GET SERVER REPLY
GETREP: PUSHJ 17,NETICW
CAIE "0
JRST WINNER
; HERE FOR LOSING SERVERS WHO SEND CRETIN COMMENTS!
REPEAT 3,PUSHJ 17,NETICW
LOSER: PUSHJ 17,NETICW
OUTCHR
CAIE ↑J
JRST LOSER
JRST GETREP
; FINALLY WINNING
WINNER: CAIE "3
SETOM LUZEP
PUSHJ 17,NETICW
CAIE "5
SETOM LUZEP
PUSHJ 17,NETICW
CAIE "0
SETOM LUZEP
PUSHJ 17,NETICW
SKIPE LUZEP
JRST OOPS
PUSH 17,
REPFLS: PUSHJ 17,NETICW
CAIE ↑J
JRST REPFLS
POP 17,
CAIN "-
JRST GETREP ; BAGBITING MULTI-LINE REPLIES!
; FALLS THROUGH
SUBTTL SEND MESSAGE HEADER
; CONS UP A WINNING HEADER
GETPPN 1,
JFCL
HRLZS 1
PNLOOP: SETZ
LSHC 6
JUMPE PNLOOP
ADDI "A-'A
PUSHJ 17,NETOCH
JUMPN 1,PNLOOP
IRPC GARPLY,,[@SAIL ]
MOVEI "GARPLY
PUSHJ 17,NETOCH
TERMIN
; DATE/TIME. OPEN-CODED (OF COURSE!!!)
DATE 1,
IDIVI 1,12.*31. ; YEAR → 1, YEARDAYS → 2
IDIVI 2,12. ; MONTH → 2, DAYS → 3
EXCH 2,3
ADDI 3,1
IDIVI 3,10.
MOVEI "0(3)
PUSHJ 17,NETOCH
MOVEI "0(4)
PUSHJ 17,NETOCH
MOVEI "/
PUSHJ 17,NETOCH
ADDI 2,1
IDIVI 2,10.
MOVEI "0(2)
PUSHJ 17,NETOCH
MOVEI "0(3)
PUSHJ 17,NETOCH
MOVEI "/
PUSHJ 17,NETOCH
ADDI 1,64.
IDIVI 1,10.
MOVEI "0(1)
PUSHJ 17,NETOCH
MOVEI "0(2)
PUSHJ 17,NETOCH
MOVEI <" >
PUSHJ 17,NETOCH
MSTIME 1,
IDIVI 1,1000.
IDIVI 1,60.*60.
IDIVI 2,60.
EXCH 1,3
IDIVI 3,10.
MOVEI "0(3)
PUSHJ 17,NETOCH
MOVEI "0(4)
PUSHJ 17,NETOCH
MOVEI ":
PUSHJ 17,NETOCH
IDIVI 2,10.
MOVEI "0(2)
PUSHJ 17,NETOCH
MOVEI "0(3)
PUSHJ 17,NETOCH
MOVEI ":
PUSHJ 17,NETOCH
IDIVI 1,10.
MOVEI "0(1)
PUSHJ 17,NETOCH
MOVEI "0(2)
PUSHJ 17,NETOCH
MOVEI ↑M
PUSHJ 17,NETOCH
MOVEI ↑J
PUSHJ 17,NETOCH
; FALLS THROUGH
SUBTTL GET AND SEND THE MESSAGE
; NOW GET USER'S MESSAGE
SKIPN CMDP
OUTSTR [ASCIZ/Enter message, terminated with αβLF.
/]
GETMSG: INCHWL
SKIPE CMDP
CAIE ↑J
CAIN 600\↑J
JRST MSGDUN
ANDI 177
PUSHJ 17,NETOCH
JRST GETMSG
MSGDUN: CAIN ↑J
PUSHJ 17,NETOCH
MOVE 1,[440700,,[ASCIZ/
.
/]]
MSGDCH: ILDB 1
JUMPE MSGFRC
PUSHJ 17,NETOCH
JRST MSGDCH
MSGFRC: PUSHJ 17,NETSND
IRPC GARPLY,,[256]
PUSHJ 17,NETICW
CAIE "GARPLY
SETOM LUZEP
TERMIN
SKIPN LUZEP
EXIT
; OOPS, WE LOST
OOPS: PUSHJ 17,NETICW
OUTCHR
CAIE ↑J
JRST OOPS
CLRBFI
EXIT
END SNDMSG